int max(int a, int b)
{
    return a > b ? a : b;
}

int integerBreak(int n)
{
    if(n < 3) {
        return 1;
    }
    if(n == 3) {
        return 2;
    }
    int a[60] = {1, 1, 2, 3, 4};
    int maxV = 0;
    for(int i = 5; i <= n; ++i) {
        for(int j = 1; j < i; ++j) {
            maxV = max(a[j] * a[i - j], maxV);
        }
        a[i] = maxV;
    }
    return a[n];
}